查看原文
其他

DL笔记:Gradient Descent 梯度下降

00 科技无障碍 2022-11-03



阿扣:上一次我们了解了损失函数。为了找到使损失函数(比如用 SSE 计算)最小的 w (权重) 和 b (偏置项),我们需要先了解一个重要的方法:梯度下降。

阿特:听起来像坐滑滑梯~

阿扣:是有那么点意思。

想象一下,我们对网络中的一些权重做了很小的改变,这些变化会让输出也有相应很小的变化:


via Neural networks and deep learning - chapter 1


然后拿这些微小的变化,跟目标值对比,看看误差是变大还是变小了,然后不断调整权重值,最终找到最合适的 w 和 b。

阿特:那要怎么找到这些值呢?

阿扣:下面有请「梯度下降」 Gradient Descent。

阿特:终于能坐滑滑梯了……

阿扣:坐这个滑滑梯可能有点晕 😄 。我先给你打个比方。想象一下,你在一个山峰的山顶,想用最快的速度到达山脚。

阿特:坐缆车可以吗?

阿扣:缆车,不存在的……只能靠走的。要往哪边下山呢?我们会选一个看起来「下降」最快的路径:

朝这个方向走一段后,我们再看下一步往哪个方向走,「下降」最快。

一直重复这个过程,就能最快的速度下到山脚。

阿特:是这么个道理。

阿扣:这个方法,就是「梯度下降」,在机器学习中很常见。所谓「梯度」,其实是指「变化率」或者「坡度 slope」,就是多变量函数的导数。

阿特:导数?!你说的是微积分里面那个导数吗? …… 瑟瑟发抖.gif

阿扣:别紧张,先听我讲,回忆回忆。

阿特:好吧。

阿扣:你还记得怎么表示函数 f(x) 的导数吧?很简单,就是 f’(x) 。

阿特:嗯嗯,记得。

阿扣:所谓「梯度」,其实就是函数在某一点上的变化率,根据微分的知识,变化率可以通过这一点的切线求得,而切线其实就是函数的导数:f’(x)。

来,跟我念一遍:求梯度 = 求变化率 = 求导数

阿特求梯度 = 求变化率 = 求导数 (假装自己听懂了)

阿扣:了解了「梯度」,然后我们来看看「下降」又是怎么回事。切线代表函数在某个点的变化率。

在上面这个图中,x = 2 位置上的切线,斜率是 > 1 的。说明如果继续往 x = 2 的右边滑去,在曲线上的值就会变大。比如当 x = 3 时,y = 9。

但是我们想要到曲线最低的地方去,因为那里可以让误差(也就是 cost )最小。所以,应该沿着梯度「相反」的方向滑动,也就朝着是 x = 2 的左边滑去。这就是「下降」的含义。

阿特:沿着「上山」最快的反方向走,就能最快「下山」。啊原来这么直白……

阿扣:对呀,原理并不复杂的。

这个视频讲解了线性回归和梯度下降的关系,来看看吧!

https://v.qq.com/txp/iframe/player.html?vid=x1330z1m9tv&width=500&height=375&auto=0

阿特:这个视频不错,讲得挺清楚的~

阿扣:我们来复习一下。用一个函数 f(h) 表示 x 和 y 的关系。x 和 y 其实是已知的,它们来自真实的数据集。我们的目标是求出 w 和 b,使得计算出来的  最接近实际的 y 值。为了得到某种类型的 y 值(比如只有 0 和 1 两种输出),我们会使用类似 Sigmoid 这样的激活函数,对 f(h) 做一下转换。

阿特:哦,我说怎么有点难理解呢。因为以前碰到 x 和 y,它们都是未知数,现在它们变成了已知数,真正的目标其实是求 w 和 b!

阿扣:没错!这是深度学习算法中一个需要调整的认知。

怎么得到 w 和 b 呢?用损失函数。如果损失函数的值大,说明模型预测得不准。我们要找到让损失函数的值最小的 w 和 b。更具体说,我们要找到 w 的变化幅度 ,每次调整一小步,看看误差 E 是不是变小了。

为了求出 ,我们引入「误差项」 ,它表示 误差 * 激活函数的导数。然后用「误差项」 乘上学习率  (用来调整梯度的大小),再乘上 x,就是每次应该调整的权重值 


阿扣:比如说,如果激活函数是 Sigmoid 函数。


…… 咦?人呢?

喂!别跑,还有好几个知识点没讲呢!……

补充:求多个变量的偏导数

如果只有一个未知数,求梯度只需要计算导数。如果有多个变量,求梯度就需要计算偏导数。偏导数其实并不复杂,只需要掌握链式求导法则,就能进行大部分的计算。

比如,损失函数 C:

对 w 求偏导:

对 b 求偏导:

Ref

  • Deep Learning Nanodegree | Udacity - https://www.udacity.com/course/deep-learning-nanodegree-foundation--nd101

  • Neural Networks and Deep Learning | Coursera - https://www.coursera.org/learn/neural-networks-deep-learning

  • Gradient Descent with Squared Errors - https://classroom.udacity.com/nanodegrees/nd101-cn/parts/ba124b66-b7f7-43ab-bc89-a390adb57f92/modules/2afd43e6-f4ce-4849-bde6-49d7164da71b/lessons/dc37fa92-75fd-4d41-b23e-9659dde80866/concepts/7d480208-0453-4457-97c3-56c720c23a89

  • Gradient (video) | Khan Academy - https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/gradient-and-directional-derivatives/v/gradient

  • An overview of gradient descent optimization algorithms - http://ruder.io/optimizing-gradient-descent/index.html#momentum

00 的 DeepLearning 笔记




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存